package com.example.springboot.mapper;

import com.example.springboot.entity.GoodsEntity;
import com.example.springboot.form.GoodsForm;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface GoodsMapper {

    /**
     * 查询所有商品
     *
     * @return
     */
    List<GoodsEntity> selectAll(@Param("limit") Integer limit,
                                @Param("offset") Integer offset);


    @Select("select * from goods")
    List<GoodsEntity> selectAll2();


    List<GoodsEntity> selectByNameOrDescription(@Param("name") String name,
                                                @Param("description") String description);


    List<GoodsEntity> queryGoodsByName(@Param("name") String name);

    List<GoodsEntity> queryGoodsWithConditions(@Param("name") String name,
                                               @Param("category") String category);

    List<GoodsEntity> queryGoodsByCategories(@Param("categories") List<String> categories);

    /**
     * 根据1个id更新一条商品信息
     *
     * @param form 表单
     * @return 更新后影响的记录条数（0-没有更新任何数据，1-更新了1条数据）
     */
    int updateGoods(GoodsForm form);

    /**
     * 根据名称、价格区间、分类、库存区间查询商品信息，按照创建时间倒序排列
     *
     * @param name
     * @param minPrice
     * @param maxPrice
     * @param categories
     * @param minStock
     * @param maxStock
     * @return
     */
    List<GoodsEntity> queryGoodsWithMultipleConditions(@Param("name") String name,
                                                       @Param("minPrice") Integer minPrice,
                                                       @Param("maxPrice") Integer maxPrice,
                                                       @Param("categories") List<String> categories,
                                                       @Param("minStock") Integer minStock,
                                                       @Param("maxStock") Integer maxStock);

}
